package com.boarsoft.boar.batch.demo.flow.demo;

import com.boarsoft.boar.batch.service.BatchReportService;
import com.boarsoft.common.util.InetUtil;
import com.boarsoft.flow.core.bean.JoinHandler;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Map;

/**
 * 状态检查,进度修正
 *
 * 多线程处理阶段可能会因为比例计算时精度丢失的原因导致数值比期望值大或者小，
 * 建议在jion阶段检查数据的实际处理情况，根据实际情况修正执行进度。
 *
 * @author wangtao
 */
public class DemoJoinHD implements JoinHandler {

    @Autowired
    private BatchReportService batchReportService;

    @Override
    public Object join(Object flowData, Map<String, Object> resultMap) {
        System.out.println(" do DemoJoinHD...");
        for (Map.Entry<String, Object> map : resultMap.entrySet()) {
            String key = map.getKey().split("-")[1];
            Boolean status = (Boolean) (map.getValue());
            System.out.println("分页 " + key + ", 执行" + (status ? "成功！" : "失败！"));
        }
        /*
        //复合总条数是否等于已处理条数
        //more code here <基础工资变动明细登记薄中的数据与fork阶段查询出来的数据比对>
        //case1相等
            //方式一、(相对、增量上报，只上报当前阶段占用的10%)
            batchReportService.report("123456", "+10", "DemoJoinHD", InetUtil.getIp());
            //方式二、（绝对上报，上报到此批量开始执行到现在节点的全进度）【推荐，可修正精度误差】
            int absProgress = 5 + 80 + 10;
            batchReportService.report("123456", String.valueOf(absProgress), "DemoJoinHD", InetUtil.getIp());
        //case2不相等
            //计算实际处理条数与总条数的差值，如总条数为10，实际处理为8，分页的总站比为80%
            //方式二、【推荐】（绝对上报，上报到此批量开始执行到现在节点的全进度）
            int absProgress2 = 5 + (8 * 80/10) + 10;
            batchReportService.report("123456", String.valueOf(absProgress2), "DemoJoinHD", InetUtil.getIp());
*/
        return flowData;
    }
}
